{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>target</th>\n",
       "      <th>source_system_tab_discover</th>\n",
       "      <th>source_system_tab_explore</th>\n",
       "      <th>source_system_tab_listen with</th>\n",
       "      <th>source_system_tab_my library</th>\n",
       "      <th>source_system_tab_notification</th>\n",
       "      <th>source_system_tab_radio</th>\n",
       "      <th>source_system_tab_search</th>\n",
       "      <th>...</th>\n",
       "      <th>language_-1.0</th>\n",
       "      <th>language_3.0</th>\n",
       "      <th>language_10.0</th>\n",
       "      <th>language_17.0</th>\n",
       "      <th>language_24.0</th>\n",
       "      <th>language_31.0</th>\n",
       "      <th>language_38.0</th>\n",
       "      <th>language_45.0</th>\n",
       "      <th>language_52.0</th>\n",
       "      <th>language_59.0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 267 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno  \\\n",
       "0  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "2  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "3  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "4  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "\n",
       "                                        song_id  target  \\\n",
       "0  BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=       1   \n",
       "1  bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=       1   \n",
       "2  JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=       1   \n",
       "3  2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=       1   \n",
       "4  3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=       1   \n",
       "\n",
       "   source_system_tab_discover  source_system_tab_explore  \\\n",
       "0                           0                          1   \n",
       "1                           0                          0   \n",
       "2                           0                          0   \n",
       "3                           0                          0   \n",
       "4                           0                          1   \n",
       "\n",
       "   source_system_tab_listen with  source_system_tab_my library  \\\n",
       "0                              0                             0   \n",
       "1                              0                             1   \n",
       "2                              0                             1   \n",
       "3                              0                             1   \n",
       "4                              0                             0   \n",
       "\n",
       "   source_system_tab_notification  source_system_tab_radio  \\\n",
       "0                               0                        0   \n",
       "1                               0                        0   \n",
       "2                               0                        0   \n",
       "3                               0                        0   \n",
       "4                               0                        0   \n",
       "\n",
       "   source_system_tab_search  ...  language_-1.0  language_3.0  language_10.0  \\\n",
       "0                         0  ...            0.0           0.0            0.0   \n",
       "1                         0  ...            0.0           0.0            0.0   \n",
       "2                         0  ...            0.0           0.0            0.0   \n",
       "3                         0  ...            1.0           0.0            0.0   \n",
       "4                         0  ...            0.0           0.0            0.0   \n",
       "\n",
       "   language_17.0  language_24.0  language_31.0  language_38.0  language_45.0  \\\n",
       "0            0.0            0.0            0.0            0.0            0.0   \n",
       "1            0.0            0.0            0.0            0.0            0.0   \n",
       "2            0.0            0.0            0.0            0.0            0.0   \n",
       "3            0.0            0.0            0.0            0.0            0.0   \n",
       "4            0.0            0.0            0.0            0.0            0.0   \n",
       "\n",
       "   language_52.0  language_59.0  \n",
       "0            1.0            0.0  \n",
       "1            1.0            0.0  \n",
       "2            1.0            0.0  \n",
       "3            0.0            0.0  \n",
       "4            1.0            0.0  \n",
       "\n",
       "[5 rows x 267 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dapth = r\"C:\\Users\\carlfei\\Desktop\\project\"\n",
    "data = pd.read_csv(dapth + r\"\\train_concat_FE.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = data.head(60000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "#进行数据处理\n",
    "y_train = train['target']\n",
    "X_train = train.drop(['target','msno','song_id'],axis=1)\n",
    "feat_names = X_train.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "LightGBM超参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1、n_estimators 2、learning_rate 3、max_depth 4、num_leaves 5、每棵树的行和列比例 6、min_child_samples,叶子节点最小样本数 7、正则参数L1和L2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "MAX_ROUNDS=10000#迭代次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "#先调学习器n_estimators\n",
    "#采用交叉验证分组\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "kfold = StratifiedKFold(n_splits=3,shuffle=True,random_state=3)\n",
    "import lightgbm as lgbm\n",
    "from lightgbm.sklearn import  LGBMClassifier\n",
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_n_estimators(params, X_train, y_train, early_stopping_rounds=20):\n",
    "    lgbm_params = params.copy()\n",
    "    #lgbm_params['num_class']=2\n",
    "    lgbmtrain=lgbm.Dataset(X_train,y_train)\n",
    "    \n",
    "    cv_result = lgbm.cv(lgbm_params, lgbmtrain, num_boost_round=MAX_ROUNDS, nfold=3, metrics='l2',\n",
    "                       early_stopping_rounds=early_stopping_rounds,seed=3)\n",
    "    \n",
    "    print(\"best n_estimators:\",len(cv_result['l2-mean']))\n",
    "    print('best score:',cv_result['l2-mean'][-1])#查看最后一个数\n",
    "    return len(cv_result['l2-mean'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best n_estimators: 10\n",
      "best score: 0.1584702480518609\n"
     ]
    }
   ],
   "source": [
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "               # 'n_estimators':446,\n",
    "                'learning_rate':0.1,\n",
    "                'num_leaves':60,\n",
    "                'max_depth':7,\n",
    "                'min_child_samples':20,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.7,\n",
    "                'bagging_fred':1,\n",
    "               'colsample_bytree':0.4,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "n_estimators_1 = get_n_estimators(params,X_train,y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 现在来调一下num_leaves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 8 candidates, totalling 24 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=8)]: Done   2 tasks      | elapsed:    4.6s\n",
      "[Parallel(n_jobs=8)]: Done  14 out of  24 | elapsed:    6.8s remaining:    4.8s\n",
      "[Parallel(n_jobs=8)]: Done  19 out of  24 | elapsed:    9.0s remaining:    2.3s\n",
      "[Parallel(n_jobs=8)]: Done  24 out of  24 | elapsed:    9.2s remaining:    0.0s\n",
      "[Parallel(n_jobs=8)]: Done  24 out of  24 | elapsed:    9.2s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=0.4, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=7, min_child_samples=20,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=10,\n",
       "        n_jobs=8, num_leaves=31, objective='regression', random_state=None,\n",
       "        reg_alpha=0, reg_lambda=0, silent=False, subsample=0.7,\n",
       "        subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=8,\n",
       "       param_grid={'num_leaves': range(10, 90, 10)},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':10,\n",
    "                'learning_rate':0.1,\n",
    "               # 'num_leaves':60,\n",
    "                'max_depth':7,\n",
    "                'min_child_samples':20,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.7,\n",
    "                'bagging_fred':1,\n",
    "               'colsample_bytree':0.4,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False, **params)\n",
    "num_leaves_s = range(10,90,10)\n",
    "tuned_parameters = dict(num_leaves=num_leaves_s)\n",
    "grid_search = GridSearchCV(lgb, n_jobs=8, param_grid=tuned_parameters, cv=kfold, scoring='neg_log_loss',\n",
    "                          verbose=5, refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4926021385869703\n",
      "{'num_leaves': 80}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_search.best_score_)\n",
    "print(grid_search.best_params_)\n",
    "    \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#话cv曲线\n",
    "test_means=grid_search.cv_results_['mean_test_score']\n",
    "test_stds = grid_search.cv_results_['std_test_score']\n",
    "train_means = grid_search.cv_results_['mean_train_score']\n",
    "train_stds = grid_search.cv_results_['std_train_score']\n",
    "x_axis=num_leaves_s\n",
    "plt.legend()\n",
    "plt.plot(x_axis, -test_means,label='-test_score')\n",
    "plt.xlabel('num_leaves')\n",
    "plt.ylabel('Log Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "80应该是最好的结果了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.50120947, 0.49629065, 0.49320329, 0.49140104, 0.49025681,\n",
       "       0.48961191, 0.48947133, 0.48944482])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-train_means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 5 candidates, totalling 15 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=8)]: Done   4 out of  15 | elapsed:    1.9s remaining:    5.3s\n",
      "[Parallel(n_jobs=8)]: Done   8 out of  15 | elapsed:    2.1s remaining:    1.8s\n",
      "[Parallel(n_jobs=8)]: Done  12 out of  15 | elapsed:    4.0s remaining:    0.9s\n",
      "[Parallel(n_jobs=8)]: Done  15 out of  15 | elapsed:    4.1s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=0.4, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=-1, min_child_samples=20,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=10,\n",
       "        n_jobs=8, num_leaves=80, objective='regression', random_state=None,\n",
       "        reg_alpha=0, reg_lambda=0, silent=False, subsample=0.7,\n",
       "        subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=8,\n",
       "       param_grid={'max_depth': range(1, 10, 2)}, pre_dispatch='2*n_jobs',\n",
       "       refit=False, return_train_score='warn', scoring='neg_log_loss',\n",
       "       verbose=5)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#来调一下树的深度吧\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':10,\n",
    "                'learning_rate':0.1,\n",
    "                'num_leaves':80,\n",
    "               # 'max_depth':7,\n",
    "                'min_child_samples':20,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.7,\n",
    "                'bagging_fred':1,\n",
    "               'colsample_bytree':0.4,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False, **params)\n",
    "max_depth_s = range(1,10,2)\n",
    "tuned_parameters = dict(max_depth=max_depth_s)\n",
    "grid_search = GridSearchCV(lgb, n_jobs=8, param_grid=tuned_parameters, cv=kfold, scoring='neg_log_loss',\n",
    "                          verbose=5, refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.48846155768264543\n",
      "{'max_depth': 9}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_search.best_score_)\n",
    "print(grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画cv曲线\n",
    "test_means=grid_search.cv_results_['mean_test_score']\n",
    "test_stds = grid_search.cv_results_['std_test_score']\n",
    "train_means = grid_search.cv_results_['mean_train_score']\n",
    "train_stds = grid_search.cv_results_['std_train_score']\n",
    "x_axis=max_depth_s\n",
    "plt.legend()\n",
    "plt.plot(x_axis, -test_means,label='-test_score')\n",
    "plt.xlabel('max_depth')\n",
    "plt.ylabel('Log Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.51595863, 0.50494078, 0.49852394, 0.49260214, 0.48846156])"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-test_means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 8 candidates, totalling 24 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=8)]: Done   2 tasks      | elapsed:    2.3s\n",
      "[Parallel(n_jobs=8)]: Done  14 out of  24 | elapsed:    4.6s remaining:    3.3s\n",
      "[Parallel(n_jobs=8)]: Done  19 out of  24 | elapsed:    6.9s remaining:    1.7s\n",
      "[Parallel(n_jobs=8)]: Done  24 out of  24 | elapsed:    7.1s remaining:    0.0s\n",
      "[Parallel(n_jobs=8)]: Done  24 out of  24 | elapsed:    7.1s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=0.4, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=9, min_child_samples=20,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=10,\n",
       "        n_jobs=8, num_leaves=80, objective='regression', random_state=None,\n",
       "        reg_alpha=0, reg_lambda=0, silent=False, subsample=0.7,\n",
       "        subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=8,\n",
       "       param_grid={'min_child_samples': range(10, 90, 10)},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#来调一下树的深度min_child_sample\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':10,\n",
    "                'learning_rate':0.1,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                #'min_child_samples':20,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.7,\n",
    "                'bagging_fred':1,\n",
    "               'colsample_bytree':0.4,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False, **params)\n",
    "min_child_samples_s = range(10,90,10)\n",
    "tuned_parameters = dict(min_child_samples=min_child_samples_s)\n",
    "grid_search = GridSearchCV(lgb, n_jobs=8, param_grid=tuned_parameters, cv=kfold, scoring='neg_log_loss',\n",
    "                          verbose=5, refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.48759049538874977\n",
      "{'min_child_samples': 10}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_search.best_score_)\n",
    "print(grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#话cv曲线\n",
    "test_means=grid_search.cv_results_['mean_test_score']\n",
    "test_stds = grid_search.cv_results_['std_test_score']\n",
    "train_means = grid_search.cv_results_['mean_train_score']\n",
    "train_stds = grid_search.cv_results_['std_train_score']\n",
    "x_axis=min_child_samples_s \n",
    "plt.legend()\n",
    "plt.plot(x_axis, -test_means)\n",
    "plt.xlabel('min_child_samples')\n",
    "plt.ylabel('Log Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.4875905 , 0.48846156, 0.48767543, 0.48995193, 0.49015189,\n",
       "       0.49095448, 0.4914333 , 0.49080005])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-test_means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 9 candidates, totalling 27 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=8)]: Done   2 tasks      | elapsed:    2.1s\n",
      "[Parallel(n_jobs=8)]: Done  18 out of  27 | elapsed:    6.7s remaining:    3.3s\n",
      "[Parallel(n_jobs=8)]: Done  24 out of  27 | elapsed:    6.9s remaining:    0.8s\n",
      "[Parallel(n_jobs=8)]: Done  27 out of  27 | elapsed:    8.2s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=0.4, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=9, min_child_samples=10,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=10,\n",
       "        n_jobs=8, num_leaves=80, objective='regression', random_state=None,\n",
       "        reg_alpha=0, reg_lambda=0, silent=False, subsample=1.0,\n",
       "        subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=8,\n",
       "       param_grid={'subsample': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#来调一下树subsample\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':10,\n",
    "                'learning_rate':0.1,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                'min_child_samples':10,\n",
    "                'max_bin':127,\n",
    "                #'subsample':0.7,\n",
    "                'bagging_fred':1,\n",
    "               'colsample_bytree':0.4,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False, **params)\n",
    "subsample_s = [i/10.0 for i in range(1,10)]\n",
    "tuned_parameters = dict(subsample = subsample_s)\n",
    "grid_search = GridSearchCV(lgb, n_jobs=8, param_grid=tuned_parameters, cv=kfold, scoring='neg_log_loss',\n",
    "                          verbose=5, refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.48759049538874977\n",
      "{'subsample': 0.1}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_search.best_score_)\n",
    "print(grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAELCAYAAAAoUKpTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAFShJREFUeJzt3X/wXXV95/HniwBGaVCEL7tIogldum1ECuVb1k63lu2qjXYNKhSh4oJVaZ2yzCjuLF27Uwtja7Ur3dmy22Llx7araHGcBtxKK5WxuoL5UvlhYNEYo3zNrnwJCmzdSCLv/eOe4PWb7zefm5Dz/d4kz8fMnbnn3M8595Wb5L7uOefec1JVSJK0O4csdgBJ0vizLCRJTZaFJKnJspAkNVkWkqQmy0KS1GRZSJKaLAtJUpNlIUlqOnSxA+wrxxxzTK1cuXKxY0jSfuXOO+98uKomWuMOmLJYuXIlU1NTix1DkvYrSb4+yjh3Q0mSmiwLSVKTZSFJajpgjllI0sFu+/btTE9Ps23btl0eW7p0KcuXL+ewww7bq3VbFpJ0gJienmbZsmWsXLmSJE/Nryq2bt3K9PQ0q1at2qt1uxtKkg4Q27Zt4+ijj/6hogBIwtFHHz3nFseoLAtJOoDMLorW/FFZFpKkJstCktRkWUjSAaSq9mj+qCwLSTpALF26lK1bt+5SDDu/DbV06dK9XrdfnZWkA8Ty5cuZnp5mZmZml8d2/s5ib1kWknSAOOyww/b6dxQtve6GSrImyQNJNia5bI7HL0wyk+Su7vbmocc+meQ7SW7uM6Mkqa23LYskS4CrgJcB08D6JOuq6r5ZQz9SVRfPsYr3Ac8Cfq2vjJKk0fS5ZXE6sLGqNlXVE8ANwJmjLlxVtwKP9xVOkjS6PsvieODBoenpbt5sZyW5J8mNSVbsyRMkuSjJVJKpuQ7oSJL2jT7LYq7fls/+ou9NwMqqOhn4FHD9njxBVV1dVZNVNTkx0bwqoCRpL/VZFtPA8JbCcmDL8ICq2lpV3+smPwCc1mMeSdJe6rMs1gMnJlmV5HDgXGDd8IAkxw1NrgXu7zGPJGkv9fZtqKrakeRi4BZgCXBNVW1IcjkwVVXrgEuSrAV2AI8AF+5cPsnfAT8O/EiSaeBNVXVLX3klSfPL0z1fyLiYnJysqampxY4hSfuVJHdW1WRrnOeGkiQ1WRaSpCbLQpLUZFlIkposC0lSk2UhSWqyLCRJTZaFJKnJspAkNVkWkqQmy0KS1GRZSJKaLAtJUpNlIUlqsiwkSU2WhSSpybKQJDVZFpKkJstCktRkWUiSmiwLSVKTZSFJarIsJElNloUkqcmykCQ1WRaSpCbLQpLUZFlIkposC0lSk2UhSWqyLCRJTb2WRZI1SR5IsjHJZXM8fmGSmSR3dbc3Dz12QZKvdLcL+swpSdq9Q/tacZIlwFXAy4BpYH2SdVV136yhH6mqi2ct+1zgt4FJoIA7u2W/3VdeSdL8+tyyOB3YWFWbquoJ4AbgzBGX/UXgb6rqka4g/gZY01NOSVJDn2VxPPDg0PR0N2+2s5Lck+TGJCv2cFlJ0gLosywyx7yaNX0TsLKqTgY+BVy/B8uS5KIkU0mmZmZmnlZYSdL8+iyLaWDF0PRyYMvwgKraWlXf6yY/AJw26rLd8ldX1WRVTU5MTOyz4JKkH9ZnWawHTkyyKsnhwLnAuuEBSY4bmlwL3N/dvwV4eZKjkhwFvLybJ0laBL19G6qqdiS5mMGb/BLgmqrakORyYKqq1gGXJFkL7AAeAS7sln0kyRUMCgfg8qp6pK+skqTdS9UuhwL2S5OTkzU1NbXYMSRpv5LkzqqabI3zF9ySpCbLQpLUZFlIkposC0lSk2UhSWqyLCRJTZaFJKnJspAkNVkWkqQmy0KS1GRZSJKaLAtJUpNlIUlqsiwkSU2WhSSpybKQJDVZFpKkJstCktRkWUiSmiwLSVKTZSFJarIsJElNloUkqcmykCQ1WRaSpKZmWST50STP6O6fkeSSJM/pP5okaVyMsmXxMeD7Sf4J8EFgFfChXlNJksbKKGXxZFXtAF4D/GFVvQ04rt9YkqRxMkpZbE9yHnABcHM377D+IkmSxs0oZfFG4GeAd1fV15KsAv6831iSpHFyaGtAVd0HXAKQ5ChgWVW9p+9gkqTxMcq3oW5LcmSS5wJ3A9cmeX//0SRJ42KU3VDPrqrHgNcC11bVacBLR1l5kjVJHkiyMclluxl3dpJKMtlNH57k2iT3Jrk7yRmjPJ8kqR+jlMWhSY4DzuEHB7ibkiwBrgJeAawGzkuyeo5xyxjs5rpjaPZbAKrqRcDLgP+YxB8QStIiGeUN+HLgFuCrVbU+yQnAV0ZY7nRgY1VtqqongBuAM+cYdwXwXmDb0LzVwK0AVfUQ8B1gcoTnlCT1oFkWVfUXVXVyVb21m95UVWeNsO7jgQeHpqe7eU9Jciqwoqpmb7HcDZyZ5NDu21enAStmP0GSi5JMJZmamZkZIZIkaW+McoB7eZKPJ3koybeSfCzJ8hHWnTnm1dB6DwGuBC6dY9w1DMplCvhD4H8CO3ZZWdXVVTVZVZMTExMjRJIk7Y1RdkNdC6wDnsdgy+Cmbl7LND+8NbAc2DI0vQw4CbgtyWbgxcC6JJNVtaOq3lZVp1TVmcBzGG3XlySpB6OUxURVXdu9ge+oquuAUT7GrwdOTLIqyeHAuQxKB4CqerSqjqmqlVW1ErgdWFtVU0meleQIgCQvA3Z0v/eQJC2C5o/ygIeTnA98uJs+D9jaWqiqdiS5mMHB8SXANVW1IcnlwFRVrdvN4scCtyR5Evgm8IYRckqSepKq2v2A5PnAHzE45UcxOH5wSVV9o/94o5ucnKypqanFjiFJ+5Ukd1ZV89umo3wb6htVtbaqJqrq2Kp6NYMf6EmSDhJ7+0O3t+/TFJKksba3ZTHX12IlSQeoUQ5wz2X3Bzr2M79z0wbu2/LYYseQpL2y+nlH8tuvemGvzzFvWSR5nLlLIcAze0skSRo785ZFVS1byCCLqe9GlqT9nWdylSQ1WRaSpCbLQpLUZFlIkpqaX52d51tRjzI4ffilVbWpj2CSpPExyu8s3s/g1OIfYvC12XOBfww8wOC6E2f0FU6SNB5G2Q21pqr+pKoer6rHqupq4JVV9RHgqJ7zSZLGwChl8WSSc5Ic0t3OGXrsgPoltyRpbqOUxesZXE/ioe72BuD8JM8ELu4xmyRpTDSPWXQHsF81z8Of3bdxJEnjqLllkWR5ko8neSjJt5J8LMnyhQgnSRoPo+yGupbBtbOfBxwP3NTNkyQdJEYpi4mquraqdnS364CJnnNJksbIKGXxcJLzkyzpbucDW/sOJkkaH6OUxa8C5wD/B/jfwNnAG/sMJUkaL82yqKpvVNXaqpqoqmOr6tXAaxcgmyRpTOztiQTfvk9TSJLG2t6WRfZpCknSWNvbsvA0H5J0EJn3F9zznJocBlsVz+wtkSRp7MxbFlW1bCGDSJLGl1fKkyQ1WRaSpCbLQpLUZFlIkpp6LYska5I8kGRjkst2M+7sJJVksps+LMn1Se5Ncn+S3+wzpyRp93oriyRLgKuAVwCrgfOSrJ5j3DLgEuCOodm/DDyjql4EnAb8WpKVfWWVJO1en1sWpwMbq2pTVT0B3ACcOce4K4D3AtuG5hVwRJJDGfym4wngsR6zSpJ2o8+yOB54cGh6upv3lCSnAiuq6uZZy94I/AODs9x+A/iDqnqkx6ySpN3osyzmOn/UU78IT3IIcCVw6RzjTge+z+DqfKuAS5OcsMsTJBclmUoyNTMzs29SS5J20WdZTAMrhqaXA1uGppcBJwG3JdkMvBhY1x3k/hXgk1W1vaoeAj4HTM5+gqq6uqomq2pyYsKL90lSX/osi/XAiUlWJTkcOJfBtbwBqKpHq+qYqlpZVSuB24G1VTXFYNfTL2TgCAZF8r96zCpJ2o3eyqKqdgAXA7cA9wMfraoNSS5Psrax+FXAjwBfYlA611bVPX1llSTtXqoOjLONT05O1tTU1GLHkKT9SpI7q2qX3fyz+QtuSVKTZSFJarIsJElNloUkqcmykCQ1WRaSpCbLQpLUZFlIkposC0lSk2UhSWqyLCRJTZaFJKnJspAkNVkWkqQmy0KS1GRZSJKaLAtJUpNlIUlqsiwkSU2WhSSpybKQJDVZFpKkJstCktRkWUiSmiwLSVKTZSFJarIsJElNloUkqcmykCQ1WRaSpCbLQpLUZFlIkpp6LYska5I8kGRjkst2M+7sJJVkspt+fZK7hm5PJjmlz6ySpPn1VhZJlgBXAa8AVgPnJVk9x7hlwCXAHTvnVdV/r6pTquoU4A3A5qq6q6+skqTd63PL4nRgY1VtqqongBuAM+cYdwXwXmDbPOs5D/hwPxElSaPosyyOBx4cmp7u5j0lyanAiqq6eTfreR3zlEWSi5JMJZmamZl5unklSfPosywyx7x66sHkEOBK4NJ5V5D8M+C7VfWluR6vqqurarKqJicmJp5uXknSPPosi2lgxdD0cmDL0PQy4CTgtiSbgRcD63Ye5O6ci7ugJGnRHdrjutcDJyZZBXyTwRv/r+x8sKoeBY7ZOZ3kNuAdVTXVTR8C/DLwkh4zSpJG0NuWRVXtAC4GbgHuBz5aVRuSXJ5k7QireAkwXVWb+sooSRpNqqo9aj8wOTlZU1NTix1DkvYrSe6sqsnWOH/BLUlqsiwkSU2WhSSpybKQJDVZFpKkJstCktRkWUiSmiwLSVKTZSFJarIsJElNloUkqcmykCQ1WRaSpCbLQpLUZFlIkposC0lSk2UhSWqyLCRJTZaFJKnJspAkNVkWkqQmy0KS1GRZSJKaLAtJUpNlIUlqsiwkSU2WhSSpybKQJDVZFpKkJstCktRkWUiSmiwLSVJTqmqxM+wTSWaArz+NVRwDPLyP4uxL5toz5toz5tozB2KuF1TVRGvQAVMWT1eSqaqaXOwcs5lrz5hrz5hrzxzMudwNJUlqsiwkSU2WxQ9cvdgB5mGuPWOuPWOuPXPQ5vKYhSSpyS0LSVLTQVUWSdYkeSDJxiSXzfH4S5L8fZIdSc4eo1xvT3JfknuS3JrkBWOU7deT3JvkriSfTbJ6HHINjTs7SSVZkG+wjPB6XZhkpnu97kry5nHI1Y05p/t3tiHJh8YhV5Irh16rLyf5zpjken6STyf5Yvf/8pVjkusF3XvEPUluS7J8nz15VR0UN2AJ8FXgBOBw4G5g9awxK4GTgf8GnD1Guf4F8Kzu/luBj4xRtiOH7q8FPjkOubpxy4DPALcDk+OQC7gQ+KOF+Pvbw1wnAl8Ejuqmjx2HXLPG/xvgmnHIxeAYwVu7+6uBzWOS6y+AC7r7vwD82b56/oNpy+J0YGNVbaqqJ4AbgDOHB1TV5qq6B3hyzHJ9uqq+203eDuy7TwtPP9tjQ5NHAAtxEKyZq3MF8F5g2wJk2pNcC22UXG8BrqqqbwNU1UNjkmvYecCHxyRXAUd2958NbBmTXKuBW7v7n57j8b12MJXF8cCDQ9PT3bzFtqe53gT8Va+JfmCkbEl+I8lXGbwxXzIOuZKcCqyoqpsXIM/IuTpndbsJbkyyYkxy/RjwY0k+l+T2JGvGJBcw2L0CrAL+dkxyvQs4P8k08D8YbPWMQ667gbO6+68BliU5el88+cFUFplj3jh8FWzkXEnOByaB9/WaaOgp55i3S7aquqqqfhT4d8Bv9Z6qkSvJIcCVwKULkGXYKK/XTcDKqjoZ+BRwfe+pRst1KINdUWcw+AT/p0meMwa5djoXuLGqvt9jnp1GyXUecF1VLQdeCfxZ9+9usXO9A/j5JF8Efh74JrBjXzz5wVQW08Dwp7jlLMymY8tIuZK8FHgnsLaqvjdO2YbcALy610QDrVzLgJOA25JsBl4MrFuAg9zN16uqtg79/X0AOK3nTCPl6sb8ZVVtr6qvAQ8wKI/FzrXTuSzMLigYLdebgI8CVNXngaUMzs+0qLmqaktVvbaqTmXwfkFVPbpPnr3vgzLjcmPwyWkTg03ZnQeHXjjP2OtYuAPczVzAqQwObJ04bq/ZcCbgVcDUOOSaNf42FuYA9yiv13FD918D3D4mudYA13f3j2Gwu+Poxc7VjfunwGa634WNyev1V8CF3f2fYPCm3Wu+EXMdAxzS3X83cPk+e/6FePHH5cZgc/HL3RvvO7t5lzP4tA7w0wza+x+ArcCGMcn1KeBbwF3dbd0YvWb/CdjQ5fr07t60FzLXrLELUhYjvl6/171ed3ev14+PSa4A7wfuA+4Fzh2HXN30u4D3LESePXi9VgOf6/4e7wJePia5zga+0o35U+AZ++q5/QW3JKnpYDpmIUnaS5aFJKnJspAkNVkWkqQmy0KS1GRZSJKaLAtpliTvSvKOMcixOUnfvwqWRmJZSJKaLAsdFJIckeQTSe5O8qUkrxv+5J5kMsltQ4v8ZJK/TfKVJG/pxhyX5DPdhXi+lOTnuvn/NclUd9Gg3xl6zs1JfjfJ57vHfyrJLUm+muTXuzFndOv8eHfhoT+e64R0Sc5P8oXuuf8kyZJ5/pxLklzX5bs3ydv23auog9mhix1AWiBrgC1V9UsASZ4N/P5uxp/M4ASERwBfTPIJBmcavaWq3t29WT+rG/vOqnqkm3drkpNrcF0UgAer6meSXMngnGM/y+CkcxuAP+7GnM7g9BFfBz4JvBa4cWeQJD8BvA742aranuS/AK9ncJGu2U4Bjq+qk7pl+z5zrA4SblnoYHEv8NIkv5/k56p9Js6/rKr/V1UPMziH0+nAeuCNSd4FvKiqHu/GnpPk7xlcae6FDN74d1o39Px3VNXjVTUDbBt6I/9CDS5o830GZ1b957Oy/EsGZ6ddn+SubvqEeXJvAk5I8p+7a1I8Ns84aY+4ZaGDQlV9OclpDE7E9ntJ/prBef53fmBaOnuRXVdRn0nyEuCXGFy/4H3A3zG4hsBPV9W3k1w3a107T0f+5ND9ndM7///t8lyzpsPgjLC/2fhj0mX4SeAXgd8AzgF+tbWc1OKWhQ4KSZ4HfLeq/hz4A+CnGJz2euf1JM6atciZSZZ2Vxk7g8Gn+hcAD1XVB4APdus4ksFZih9N8o+AV+xFvNOTrOqOVbwO+Oysx28Fzk5ybPdneW6XZa4/585TVH8M+A9dRulpc8tCB4sXAe9L8iSwHXgr8Ezgg0n+PXDHrPFfAD4BPB+4oqq2JLkA+LdJtgP/F/jXVfW17qpkGxjsAvrcXmT7PPCeLuNngI8PP1hV9yX5LeCvu0LZzmCr4etzrOt44Nqhg+TNrRFpFJ6iXFpESc4A3lFV/2qxs0i7424oSVKTWxbSfirJHcAzZs1+Q1Xduxh5dGCzLCRJTe6GkiQ1WRaSpCbLQpLUZFlIkposC0lS0/8Hr3gorYRejCcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#话cv曲线\n",
    "test_means=grid_search.cv_results_['mean_test_score']\n",
    "test_stds = grid_search.cv_results_['std_test_score']\n",
    "train_means = grid_search.cv_results_['mean_train_score']\n",
    "train_stds = grid_search.cv_results_['std_train_score']\n",
    "x_axis=subsample_s \n",
    "plt.legend()\n",
    "plt.plot(x_axis, -test_means)\n",
    "plt.xlabel('subsample_s')\n",
    "plt.ylabel('Log Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.4875905, 0.4875905, 0.4875905, 0.4875905, 0.4875905, 0.4875905,\n",
       "       0.4875905, 0.4875905, 0.4875905])"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-test_means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "#就定位0.4吧"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 9 candidates, totalling 27 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=8)]: Done   2 tasks      | elapsed:    2.0s\n",
      "[Parallel(n_jobs=8)]: Done  18 out of  27 | elapsed:    7.1s remaining:    3.5s\n",
      "[Parallel(n_jobs=8)]: Done  24 out of  27 | elapsed:    7.6s remaining:    0.9s\n",
      "[Parallel(n_jobs=8)]: Done  27 out of  27 | elapsed:    8.9s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=1.0, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=9, min_child_samples=10,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=10,\n",
       "        n_jobs=8, num_leaves=80, objective='regression', random_state=None,\n",
       "        reg_alpha=0, reg_lambda=0, silent=False, subsample=0.4,\n",
       "        subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=8,\n",
       "       param_grid={'colsample_bytree': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#来调一下树colsample_bytree\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':10,\n",
    "                'learning_rate':0.1,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                'min_child_samples':10,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.4,\n",
    "                'bagging_fred':1,\n",
    "             # 'colsample_bytree':0.4,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False, **params)\n",
    "colsample_bytree_s = [i/10.0 for i in range(1,10)]\n",
    "tuned_parameters = dict(colsample_bytree=colsample_bytree_s)\n",
    "grid_search = GridSearchCV(lgb, n_jobs=8, param_grid=tuned_parameters, cv=kfold, scoring='neg_log_loss',\n",
    "                          verbose=5, refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4792864943163826\n",
      "{'colsample_bytree': 0.9}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_search.best_score_)\n",
    "print(grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画cv曲线\n",
    "test_means=grid_search.cv_results_['mean_test_score']\n",
    "test_stds = grid_search.cv_results_['std_test_score']\n",
    "train_means = grid_search.cv_results_['mean_train_score']\n",
    "train_stds = grid_search.cv_results_['std_train_score']\n",
    "x_axis=subsample_s \n",
    "plt.legend()\n",
    "plt.plot(x_axis, -test_means)\n",
    "plt.xlabel('subsample_s')\n",
    "plt.ylabel('Log Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52324447, 0.50087722, 0.49412556, 0.4875905 , 0.48428274,\n",
       "       0.48103288, 0.48046897, 0.47981867, 0.47928649])"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-test_means"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 来调正则参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 5 candidates, totalling 15 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=8)]: Done   4 out of  15 | elapsed:    2.1s remaining:    5.9s\n",
      "[Parallel(n_jobs=8)]: Done   8 out of  15 | elapsed:    2.2s remaining:    1.9s\n",
      "[Parallel(n_jobs=8)]: Done  12 out of  15 | elapsed:    4.2s remaining:    1.0s\n",
      "[Parallel(n_jobs=8)]: Done  15 out of  15 | elapsed:    4.3s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=0.9, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=9, min_child_samples=10,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=10,\n",
       "        n_jobs=8, num_leaves=80, objective='regression', random_state=None,\n",
       "        reg_alpha=0, reg_lambda=0.0, silent=False, subsample=0.1,\n",
       "        subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=8,\n",
       "       param_grid={'reg_lambda': range(0, 9, 2)}, pre_dispatch='2*n_jobs',\n",
       "       refit=False, return_train_score='warn', scoring='neg_log_loss',\n",
       "       verbose=5)"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#L2\n",
    "reg_lambda_s=range(0,9,2)\n",
    "tuned_parameters = dict(reg_lambda=reg_lambda_s)\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':10,\n",
    "                'learning_rate':0.1,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                'min_child_samples':10,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.1,\n",
    "                'bagging_fred':1,\n",
    "              'colsample_bytree':0.9,\n",
    "                #'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False, **params)\n",
    "grid_search = GridSearchCV(lgb, n_jobs=8, param_grid=tuned_parameters, cv=kfold, scoring='neg_log_loss',\n",
    "                          verbose=5, refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4792864943163826\n",
      "{'reg_lambda': 0}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_search.best_score_)\n",
    "print(grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\carlfei\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画cv曲线\n",
    "test_means=grid_search.cv_results_['mean_test_score']\n",
    "test_stds = grid_search.cv_results_['std_test_score']\n",
    "train_means = grid_search.cv_results_['mean_train_score']\n",
    "train_stds = grid_search.cv_results_['std_train_score']\n",
    "x_axis=reg_lambda_s\n",
    "plt.legend()\n",
    "plt.plot(x_axis, -test_means)\n",
    "plt.xlabel('regr_lambda')\n",
    "plt.ylabel('Log Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 2 candidates, totalling 6 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=8)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=8)]: Done   3 out of   6 | elapsed:    1.6s remaining:    1.6s\n",
      "[Parallel(n_jobs=8)]: Done   6 out of   6 | elapsed:    1.6s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=0.9, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=9, min_child_samples=10,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=10,\n",
       "        n_jobs=8, num_leaves=80, objective='regression', random_state=None,\n",
       "        reg_alpha=0.0, reg_lambda=0, silent=False, subsample=0.4,\n",
       "        subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=8,\n",
       "       param_grid={'reg_alpha': range(0, 2)}, pre_dispatch='2*n_jobs',\n",
       "       refit=False, return_train_score='warn', scoring='neg_log_loss',\n",
       "       verbose=5)"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#看一下0的效果\n",
    "reg_alpha_s=range(0,2,1)\n",
    "tuned_parameters = dict(reg_alpha=reg_alpha_s)\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':10,\n",
    "                'learning_rate':0.1,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                'min_child_samples':10,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.4,\n",
    "                'bagging_fred':1,\n",
    "              'colsample_bytree':0.9,\n",
    "                'reg_lambda':0,\n",
    "                #'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False, **params)\n",
    "grid_search = GridSearchCV(lgb, n_jobs=8, param_grid=tuned_parameters, cv=kfold, scoring='neg_log_loss',\n",
    "                          verbose=5, refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4792864943163826\n",
      "{'reg_alpha': 0}\n"
     ]
    }
   ],
   "source": [
    "print(-grid_search.best_score_)\n",
    "print(grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best n_estimators: 100\n",
      "best score: 0.15349764014448422\n"
     ]
    }
   ],
   "source": [
    "#用所有训练的数据，调小学习率为0.01\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "               # 'n_estimators':294,\n",
    "                'learning_rate':0.01,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                'min_child_samples':10,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.4,\n",
    "                'bagging_fred':1,\n",
    "              'colsample_bytree':0.9,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "n_estimators_2 = get_n_estimators(params,X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best n_estimators: 1000\n",
      "best score: 0.15357058231891707\n"
     ]
    }
   ],
   "source": [
    "#用所有训练的数据，调小学习率为0.001\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "               # 'n_estimators':294,\n",
    "                'learning_rate':0.001,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                'min_child_samples':10,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.4,\n",
    "                'bagging_fred':1,\n",
    "              'colsample_bytree':0.9,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "n_estimators_3 = get_n_estimators(params,X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LGBMClassifier(bagging_fred=1, boosting_type='goss', class_weight=None,\n",
       "        colsample_bytree=0.9, importance_type='split', learning_rate=0.01,\n",
       "        max_bin=127, max_depth=9, min_child_samples=10,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=100,\n",
       "        n_jobs=8, num_leaves=80, objective='regression', random_state=None,\n",
       "        reg_alpha=0, reg_lambda=0, silent=False, subsample=0.4,\n",
       "        subsample_for_bin=200000, subsample_freq=0)"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#用所有训练的数据，调小学习率为0.01\n",
    "params = {\n",
    "                'boosting_type':'goss',\n",
    "                'objective':'regression',\n",
    "                'n_jobs':8,\n",
    "                'n_estimators':100,\n",
    "                'learning_rate':0.01,\n",
    "                'num_leaves':80,\n",
    "                'max_depth':9,\n",
    "                'min_child_samples':10,\n",
    "                'max_bin':127,\n",
    "                'subsample':0.4,\n",
    "                'bagging_fred':1,\n",
    "              'colsample_bytree':0.9,\n",
    "                'reg_lambda':0,\n",
    "                'reg_alpha':0\n",
    "}\n",
    "lgb = LGBMClassifier(silent=False,**params)\n",
    "lgb.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存好模型，已备测试\n",
    "import pickle\n",
    "pickle.dump(lgb,open('light_gbm_pkl','wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [],
   "source": [
    "#特征重要性来看一下啊\n",
    "df = pd.DataFrame({'columns':list(feat_names),'importance':list(lgb.feature_importances_.T)})\n",
    "df = df.sort_values(by=['importance'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>253</th>\n",
       "      <td>artist_name_label</td>\n",
       "      <td>886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>date_diff_bin_2555</td>\n",
       "      <td>318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>registered_via_7</td>\n",
       "      <td>273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>262</th>\n",
       "      <td>language_52.0</td>\n",
       "      <td>266</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>gender</td>\n",
       "      <td>244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>date_diff_bin_1095</td>\n",
       "      <td>225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>date_diff_bin_1825</td>\n",
       "      <td>202</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>city_1</td>\n",
       "      <td>199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>city_5</td>\n",
       "      <td>172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>255</th>\n",
       "      <td>language_3.0</td>\n",
       "      <td>168</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>date_diff_bin_365</td>\n",
       "      <td>162</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>city_22</td>\n",
       "      <td>156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>source_type_online-playlist</td>\n",
       "      <td>154</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>city_13</td>\n",
       "      <td>151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>genre_ids_matrix_137</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>source_type_album</td>\n",
       "      <td>148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>city_4</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>date_diff_bin_3650</td>\n",
       "      <td>140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>bd_exception</td>\n",
       "      <td>140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>registered_via_3</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>genre_ids_matrix_138</td>\n",
       "      <td>135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>registered_via_9</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>246</th>\n",
       "      <td>genre_ids_matrix_185</td>\n",
       "      <td>120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>source_type_listen-with</td>\n",
       "      <td>113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>241</th>\n",
       "      <td>genre_ids_matrix_180</td>\n",
       "      <td>113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>source_type_radio</td>\n",
       "      <td>112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>source_system_tab_search</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>source_type_local-playlist</td>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>city_7</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>source_type_song</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158</th>\n",
       "      <td>genre_ids_matrix_97</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>genre_ids_matrix_98</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>genre_ids_matrix_99</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>genre_ids_matrix_100</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>137</th>\n",
       "      <td>genre_ids_matrix_76</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>135</th>\n",
       "      <td>genre_ids_matrix_74</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>genre_ids_matrix_47</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>genre_ids_matrix_73</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>genre_ids_matrix_50</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>genre_ids_matrix_51</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>genre_ids_matrix_52</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>114</th>\n",
       "      <td>genre_ids_matrix_53</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>115</th>\n",
       "      <td>genre_ids_matrix_54</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>genre_ids_matrix_55</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>genre_ids_matrix_56</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>118</th>\n",
       "      <td>genre_ids_matrix_57</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>genre_ids_matrix_58</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>genre_ids_matrix_59</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>121</th>\n",
       "      <td>genre_ids_matrix_60</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>genre_ids_matrix_61</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>123</th>\n",
       "      <td>genre_ids_matrix_62</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>genre_ids_matrix_63</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>genre_ids_matrix_64</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>genre_ids_matrix_65</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>127</th>\n",
       "      <td>genre_ids_matrix_66</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>genre_ids_matrix_67</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>129</th>\n",
       "      <td>genre_ids_matrix_68</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>130</th>\n",
       "      <td>genre_ids_matrix_69</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>133</th>\n",
       "      <td>genre_ids_matrix_72</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>263</th>\n",
       "      <td>language_59.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>264 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                         columns  importance\n",
       "253            artist_name_label         886\n",
       "58            date_diff_bin_2555         318\n",
       "45              registered_via_7         273\n",
       "262                language_52.0         266\n",
       "42                        gender         244\n",
       "56            date_diff_bin_1095         225\n",
       "57            date_diff_bin_1825         202\n",
       "20                        city_1         199\n",
       "23                        city_5         172\n",
       "255                 language_3.0         168\n",
       "54             date_diff_bin_365         162\n",
       "40                       city_22         156\n",
       "14   source_type_online-playlist         154\n",
       "31                       city_13         151\n",
       "198         genre_ids_matrix_137         150\n",
       "8              source_type_album         148\n",
       "22                        city_4         143\n",
       "59            date_diff_bin_3650         140\n",
       "41                  bd_exception         140\n",
       "43              registered_via_3         136\n",
       "199         genre_ids_matrix_138         135\n",
       "46              registered_via_9         130\n",
       "246         genre_ids_matrix_185         120\n",
       "10       source_type_listen-with         113\n",
       "241         genre_ids_matrix_180         113\n",
       "15             source_type_radio         112\n",
       "6       source_system_tab_search         109\n",
       "12    source_type_local-playlist         108\n",
       "25                        city_7         100\n",
       "16              source_type_song          97\n",
       "..                           ...         ...\n",
       "158          genre_ids_matrix_97           0\n",
       "159          genre_ids_matrix_98           0\n",
       "160          genre_ids_matrix_99           0\n",
       "161         genre_ids_matrix_100           0\n",
       "137          genre_ids_matrix_76           0\n",
       "135          genre_ids_matrix_74           0\n",
       "108          genre_ids_matrix_47           0\n",
       "134          genre_ids_matrix_73           0\n",
       "111          genre_ids_matrix_50           0\n",
       "112          genre_ids_matrix_51           0\n",
       "113          genre_ids_matrix_52           0\n",
       "114          genre_ids_matrix_53           0\n",
       "115          genre_ids_matrix_54           0\n",
       "116          genre_ids_matrix_55           0\n",
       "117          genre_ids_matrix_56           0\n",
       "118          genre_ids_matrix_57           0\n",
       "119          genre_ids_matrix_58           0\n",
       "120          genre_ids_matrix_59           0\n",
       "121          genre_ids_matrix_60           0\n",
       "122          genre_ids_matrix_61           0\n",
       "123          genre_ids_matrix_62           0\n",
       "124          genre_ids_matrix_63           0\n",
       "125          genre_ids_matrix_64           0\n",
       "126          genre_ids_matrix_65           0\n",
       "127          genre_ids_matrix_66           0\n",
       "128          genre_ids_matrix_67           0\n",
       "129          genre_ids_matrix_68           0\n",
       "130          genre_ids_matrix_69           0\n",
       "133          genre_ids_matrix_72           0\n",
       "263                language_59.0           0\n",
       "\n",
       "[264 rows x 2 columns]"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#再用柱状图来看一下分布\n",
    "plt.bar(range(len(lgb.feature_importances_)), lgb.feature_importances_)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
